package com.aura.springbook.common.util;

import com.aura.springbook.common.R;
import com.aura.springbook.common.exception.ResultCode;

/**
 * 响应工具类
 * <p>
 * 提供简化的响应构建方法，减少控制器中的重复代码
 */
public class ResponseUtil {

    /**
     * 创建成功响应（带数据）
     *
     * @param data 响应数据
     * @param <T>  数据类型
     * @return 响应对象
     */
    public static <T> R<T> success(T data) {
        return R.ok(data);
    }

    /**
     * 创建成功响应（无数据）
     *
     * @return 响应对象
     */
    public static <T> R<T> success() {
        return R.ok();
    }

    /**
     * 创建失败响应
     *
     * @param code 错误码枚举
     * @param <T>  数据类型
     * @return 响应对象
     */
    public static <T> R<T> fail(ResultCode code) {
        return R.fail(code);
    }

    /**
     * 创建失败响应（自定义消息）
     *
     * @param code    错误码枚举
     * @param message 自定义错误消息
     * @param <T>     数据类型
     * @return 响应对象
     */
    public static <T> R<T> fail(ResultCode code, String message) {
        return R.fail(code, message);
    }

    /**
     * 创建参数错误响应
     *
     * @param message 错误消息
     * @param <T>     数据类型
     * @return 响应对象
     */
    public static <T> R<T> paramError(String message) {
        return R.fail(ResultCode.PARAM_ERROR, message);
    }

    /**
     * 创建资源不存在响应
     *
     * @param <T> 数据类型
     * @return 响应对象
     */
    public static <T> R<T> notFound() {
        return R.fail(ResultCode.RESOURCE_NOT_FOUND);
    }
}